{"componentChunkName":"component---src-templates-blog-post-blog-post-js","path":"/articulos/typescript-7-go-compilador-nativo/","result":{"data":{"mdx":{"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"TypeScript 7: por qué TypeScript ha tenido que reescribirse en Go\",\n  \"seoTitle\": \"TypeScript 7 y Go: el nuevo compilador nativo\",\n  \"slug\": \"typescript-7-go-compilador-nativo\",\n  \"date\": \"2026-09-15\",\n  \"description\": \"TypeScript 7 estrena un compilador nativo escrito en Go que puede ser entre 8 y 12 veces más rápido. Analizamos por qué Microsoft ha realizado este cambio y qué supone para los desarrolladores web.\",\n  \"description_sort\": \"Por qué TypeScript 7 cambia su compilador de JavaScript a Go y cómo afecta al rendimiento.\",\n  \"featuredImage\": \"typescript-7-go-portada.webp\",\n  \"twitterUsername\": \"@CursosDesarrol1\",\n  \"tags\": [\"typescript\", \"go\", \"compiladores\", \"rendimiento\", \"desarrollo-web\", \"javascript\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/a3361908bdefaf623e56faa2b9a7ce63/485a2/typescript-7-go-portada.webp\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.333333333333336%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/webp;base64,UklGRogAAABXRUJQVlA4IHwAAADwAwCdASoUAAsAPtFUo0uoJKMhsAgBABoJZQCdAB09TH0fkSfjyzuAAP7uwy5OEaSwkGpaN0dtgdEplQhMNxYiT02/+xHMmEKsyvzxG7s2yfNBgFu80BUiJ8aY9ej/TDrBhQ5UFzD8V8Pv+tG4yZIwiyeB4U2eIi0CSAAA')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Desarrollador trabajando en un proyecto TypeScript grande con el editor y la salida de compilación abiertos\",\n    \"title\": \"Desarrollador trabajando en un proyecto TypeScript grande con el editor y la salida de compilación abiertos\",\n    \"src\": \"/static/a3361908bdefaf623e56faa2b9a7ce63/5bb53/typescript-7-go-portada.webp\",\n    \"srcSet\": [\"/static/a3361908bdefaf623e56faa2b9a7ce63/cb58d/typescript-7-go-portada.webp 300w\", \"/static/a3361908bdefaf623e56faa2b9a7ce63/f8b1b/typescript-7-go-portada.webp 600w\", \"/static/a3361908bdefaf623e56faa2b9a7ce63/5bb53/typescript-7-go-portada.webp 1200w\", \"/static/a3361908bdefaf623e56faa2b9a7ce63/485a2/typescript-7-go-portada.webp 1600w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), mdx(\"br\", null), mdx(\"br\", null), mdx(\"h1\", null, \"TypeScript 7: por qu\\xE9 TypeScript ha tenido que reescribirse en Go\"), mdx(\"p\", null, \"TypeScript lleva m\\xE1s de una d\\xE9cada solucionando uno de los grandes problemas del desarrollo con JavaScript: mantener aplicaciones cada vez m\\xE1s grandes sin perder el control sobre el c\\xF3digo.\"), mdx(\"p\", null, \"Pero el crecimiento de los proyectos tambi\\xE9n termin\\xF3 afectando al propio TypeScript. Repositorios con millones de l\\xEDneas, \\xE1rboles de dependencias enormes y cientos de paquetes dentro de un monorepo hicieron que comprobar tipos, compilar y proporcionar informaci\\xF3n al editor se convirtiera en un problema.\"), mdx(\"p\", null, \"Microsoft ha tomado una decisi\\xF3n poco habitual para solucionarlo: \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"TypeScript 7 ha trasladado su compilador y buena parte de sus herramientas desde TypeScript a Go.\"), \" No es simplemente una versi\\xF3n con algunos tipos adicionales; es un cambio de arquitectura del propio lenguaje.\"), mdx(\"p\", null, \"El equipo estima mejoras t\\xEDpicas de entre \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"8 y 12 veces\"), \" en compilaciones completas. \\xBFC\\xF3mo puede una reimplementaci\\xF3n conseguir semejante diferencia y qu\\xE9 cambia para quienes utilizamos TypeScript para desarrollar aplicaciones web?\"), mdx(\"h2\", null, \"El curioso caso de un lenguaje escrito en s\\xED mismo\"), mdx(\"p\", null, \"Hasta ahora, el compilador de TypeScript estaba escrito fundamentalmente en TypeScript. Es decir, utiliz\\xE1bamos TypeScript para compilar TypeScript. A este tipo de sistema se le denomina \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"self-hosted\"), \".\"), mdx(\"p\", null, \"Cuando ejecut\\xE1bamos este comando:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'npx tsc'), mdx(\"p\", null, \"Node.js cargaba el compilador de TypeScript y este analizaba nuestro proyecto. El proceso, simplificado, era el siguiente:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'Código TypeScript\\n       ↓\\nCompilador TypeScript\\n       ↓\\nNode.js / V8\\n       ↓\\nJavaScript generado'), mdx(\"p\", null, \"Durante a\\xF1os este dise\\xF1o funcion\\xF3 extraordinariamente bien y ten\\xEDa una ventaja evidente: el equipo encargado de crear TypeScript utilizaba su propio lenguaje. Sin embargo, los proyectos modernos han crecido mucho.\"), mdx(\"h2\", null, \"El precio de trabajar con millones de l\\xEDneas de c\\xF3digo\"), mdx(\"p\", null, \"Imaginemos un proyecto relativamente grande:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'apps/\\n    frontend/\\n    backend/\\n    admin/\\n\\npackages/\\n    authentication/\\n    database/\\n    components/\\n    shared/\\n    validation/'), mdx(\"p\", null, \"Puede contener cientos de miles de l\\xEDneas TypeScript; en organizaciones grandes, directamente millones. Al abrirlo, TypeScript necesita comprender archivos, imports, m\\xF3dulos, tipos, interfaces, gen\\xE9ricos, dependencias, declaraciones y referencias entre proyectos.\"), mdx(\"p\", null, \"No basta con analizar cada archivo individualmente: el sistema de tipos necesita conocer las relaciones existentes entre ellos. Por eso una operaci\\xF3n aparentemente sencilla puede resultar costosa:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'tsc --noEmit'), mdx(\"p\", null, \"No genera JavaScript, pero s\\xED analiza todo el proyecto para comprobar que los tipos son correctos. En proyectos suficientemente grandes, esa operaci\\xF3n se convierte en una parte significativa del tiempo de compilaci\\xF3n.\"), mdx(\"h2\", null, \"La soluci\\xF3n: un compilador nativo\"), mdx(\"p\", null, \"La decisi\\xF3n del equipo de TypeScript fue construir una nueva implementaci\\xF3n nativa en \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Go\"), \". El nuevo esquema se parece m\\xE1s a esto:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'Código TypeScript\\n       ↓\\nCompilador nativo\\n       ↓\\nBinario\\n       ↓\\nSistema operativo'), mdx(\"p\", null, \"En lugar de ejecutar el compilador sobre Node.js, tenemos un programa nativo. Esto permite replantear el uso de memoria y aprovechar mejor m\\xFAltiples n\\xFAcleos del procesador.\"), mdx(\"h2\", null, \"El problema no era simplemente que JavaScript fuese lento\"), mdx(\"p\", null, \"Ser\\xEDa una conclusi\\xF3n demasiado simple decir que Go es m\\xE1s r\\xE1pido que JavaScript y por eso Microsoft ha reescrito TypeScript. Node.js y V8 son extremadamente r\\xE1pidos y JavaScript puede ofrecer un rendimiento excelente en muchos tipos de aplicaciones.\"), mdx(\"p\", null, \"El compilador de TypeScript tiene unas caracter\\xEDsticas particulares: analiza grandes grafos de archivos y dependencias y realiza enormes cantidades de trabajo sobre estructuras de datos. La implementaci\\xF3n hist\\xF3rica ten\\xEDa adem\\xE1s l\\xEDmites importantes para utilizar m\\xFAltiples n\\xFAcleos.\"), mdx(\"p\", null, \"Los procesadores actuales pueden tener 8, 12, 16 o 24 n\\xFAcleos. Sin embargo, disponer de muchos n\\xFAcleos no sirve de demasiado si una parte importante del trabajo se ejecuta secuencialmente.\"), mdx(\"h2\", null, \"Go y el paralelismo\"), mdx(\"p\", null, \"Go result\\xF3 atractivo por su modelo de concurrencia. Sus \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"goroutines\"), \" son tareas ligeras que el runtime puede distribuir entre distintos hilos. Esto permite paralelizar partes del trabajo del compilador.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/19e9816e16b7cf02765730a1630c5c62/aa619/typescript-7-go-paralelismo.webp\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.333333333333336%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/webp;base64,UklGRo4AAABXRUJQVlA4IIIAAABQBACdASoUAAsAPtFWo0uoJKMhsAgBABoJZQDG9CPw5H1p0OzGpXo2i/fQAP7pqk9OYzbRIke7HX/qT5+jDHpmF6dO2M+NCJpNXOrGgL19QI051waEtvECmWVuhhoFrebNdW1dx0bmtbyra1ttY3hKwC8PJp9lRcU5yI+0WsxF0/AA')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Escritorio de desarrollo con un grafo de dependencias, código TypeScript y métricas de rendimiento\",\n    \"title\": \"Escritorio de desarrollo con un grafo de dependencias, código TypeScript y métricas de rendimiento\",\n    \"src\": \"/static/19e9816e16b7cf02765730a1630c5c62/5bb53/typescript-7-go-paralelismo.webp\",\n    \"srcSet\": [\"/static/19e9816e16b7cf02765730a1630c5c62/cb58d/typescript-7-go-paralelismo.webp 300w\", \"/static/19e9816e16b7cf02765730a1630c5c62/f8b1b/typescript-7-go-paralelismo.webp 600w\", \"/static/19e9816e16b7cf02765730a1630c5c62/5bb53/typescript-7-go-paralelismo.webp 1200w\", \"/static/19e9816e16b7cf02765730a1630c5c62/aa619/typescript-7-go-paralelismo.webp 1400w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), mdx(\"p\", null, \"La realidad interna es m\\xE1s compleja porque los tipos pueden depender unos de otros, pero el objetivo es aprovechar mejor el hardware moderno. TypeScript 7 combina ejecuci\\xF3n nativa, memoria compartida y paralelismo para acelerar el an\\xE1lisis de proyectos. El equipo ha indicado que puede realizar en paralelo etapas como el an\\xE1lisis, la comprobaci\\xF3n de tipos y la emisi\\xF3n cuando las dependencias lo permiten.\"), mdx(\"h2\", null, \"\\xBFCu\\xE1nto m\\xE1s r\\xE1pido es TypeScript 7?\"), mdx(\"p\", null, \"Seg\\xFAn las pruebas publicadas por el equipo de TypeScript, las mejoras habituales en compilaciones completas se sit\\xFAan aproximadamente entre \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"8 y 12 veces\"), \". No significa que todas las operaciones sean exactamente diez veces m\\xE1s r\\xE1pidas: el tama\\xF1o del repositorio, la configuraci\\xF3n, las dependencias y la operaci\\xF3n ejecutada afectan al resultado.\"), mdx(\"p\", null, \"Imaginemos \\xFAnicamente como ejemplo una comprobaci\\xF3n de tipos que tarda 20 segundos. Una reducci\\xF3n de diez veces significar\\xEDa:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'Antes\\n20 segundos\\n\\nDespués\\n2 segundos'), mdx(\"p\", null, \"Son n\\xFAmeros ilustrativos, no una promesa de rendimiento. Pero muestran por qu\\xE9 importa la diferencia: cuando una operaci\\xF3n deja de interrumpir el flujo de trabajo y se completa casi inmediatamente, cambia la forma de utilizar la herramienta.\"), mdx(\"h2\", null, \"El cambio m\\xE1s importante puede estar en el editor\"), mdx(\"p\", null, \"Al hablar de compiladores solemos pensar en el build:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'npm run build'), mdx(\"p\", null, \"Pero TypeScript tambi\\xE9n trabaja cuando no estamos compilando. VS Code y otros editores utilizan su servicio de lenguaje para proporcionar autocompletado, navegaci\\xF3n, informaci\\xF3n sobre tipos, detecci\\xF3n de errores, refactorizaciones y b\\xFAsqueda de referencias.\"), mdx(\"p\", null, \"Cuando escribimos \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"user.\"), \" y aparecen \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"id\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"name\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"email\"), \" y \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"createdAt\"), \", hay bastante an\\xE1lisis ocurriendo detr\\xE1s. En proyectos peque\\xF1os apenas se aprecia; en repositorios enormes puede haber retrasos, consumo elevado de memoria o inicializaciones lentas. Por eso acelerar el motor tambi\\xE9n mejora directamente la experiencia dentro del IDE.\"), mdx(\"h2\", null, \"\\xBFPor qu\\xE9 Go?\"), mdx(\"p\", null, \"Microsoft podr\\xEDa haber elegido C++, Rust, C# u otro lenguaje capaz de generar c\\xF3digo nativo. Go aporta compilaci\\xF3n r\\xE1pida, soporte multiplataforma, concurrencia integrada, garbage collector, generaci\\xF3n sencilla de binarios y un modelo de programaci\\xF3n relativamente simple.\"), mdx(\"p\", null, \"Tambi\\xE9n hab\\xEDa una condici\\xF3n fundamental: el objetivo no era redise\\xF1ar TypeScript, sino trasladar su comportamiento existente a una implementaci\\xF3n nativa manteniendo la compatibilidad. Millones de proyectos dependen de que el sistema de tipos contin\\xFAe comport\\xE1ndose como esperan.\"), mdx(\"h2\", null, \"TypeScript 7 no cambia c\\xF3mo escribimos TypeScript\"), mdx(\"p\", null, \"Un cambio interno tan grande podr\\xEDa hacer pensar que tendremos que aprender un TypeScript diferente. No es el objetivo. Este c\\xF3digo sigue siendo TypeScript:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'interface User {\\n    id: number\\n    name: string\\n    email: string\\n}\\n\\nfunction getUserName(user: User): string {\\n    return user.name\\n}'), mdx(\"p\", null, \"La gran transformaci\\xF3n ocurre debajo. Para el desarrollador, el paso es de TypeScript 6 a TypeScript 7; para Microsoft, es el paso de un compilador ejecutado sobre Node.js a un compilador nativo con una arquitectura interna nueva.\"), mdx(\"h2\", null, \"\\xBFQu\\xE9 ocurre con \", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"tsc\"), \" y \", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"tsconfig.json\"), \"?\"), mdx(\"p\", null, \"El objetivo es mantener una experiencia familiar. Seguimos trabajando con \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tsc\"), \" y archivos como \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tsconfig.json\"), \":\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, '{\\n  \"compilerOptions\": {\\n    \"strict\": true,\\n    \"target\": \"ES2022\",\\n    \"module\": \"NodeNext\"\\n  }\\n}'), mdx(\"p\", null, \"La idea no es sustituir el ecosistema de TypeScript, sino el motor que hay debajo. Aun as\\xED, TypeScript 7.0 no publica todav\\xEDa una API program\\xE1tica equivalente; las herramientas que la necesitan pueden ejecutarse junto a TypeScript 6 mientras llega la API renovada prevista para una versi\\xF3n posterior.\"), mdx(\"h2\", null, \"TypeScript 6 fue una versi\\xF3n de transici\\xF3n\"), mdx(\"p\", null, \"TypeScript 6 no fue simplemente otra versi\\xF3n intermedia. Microsoft la plante\\xF3 como puente hacia el nuevo compilador: varias opciones antiguas fueron marcadas como obsoletas para preparar los proyectos.\"), mdx(\"p\", null, \"Si mantenemos un proyecto antiguo, actualizar directamente sin revisar la configuraci\\xF3n puede no ser una buena estrategia. Conviene comprobar el \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tsconfig.json\"), \" y solucionar las advertencias de deprecaci\\xF3n antes de completar la migraci\\xF3n. El cambio interno busca compatibilidad, pero no implica mantener indefinidamente todas las configuraciones hist\\xF3ricas.\"), mdx(\"h2\", null, \"Consecuencias para Angular, React y NestJS\"), mdx(\"p\", null, \"TypeScript est\\xE1 profundamente integrado en el ecosistema web. Angular lo utiliza como lenguaje principal, NestJS est\\xE1 dise\\xF1ado alrededor de TypeScript y una enorme cantidad de proyectos React utilizan \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".ts\"), \" y \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".tsx\"), \".\"), mdx(\"p\", null, \"Un proyecto NestJS puede contener controladores, servicios, entidades, DTO, guards, decoradores, m\\xF3dulos y tests con miles de relaciones entre tipos. Una aplicaci\\xF3n Angular grande puede incluir cientos de componentes y servicios. Un monorepo puede combinar ambos. Cuanto mayor es el proyecto, m\\xE1s interesante resulta reducir el coste del an\\xE1lisis de tipos.\"), mdx(\"h2\", null, \"El impacto en CI/CD\"), mdx(\"p\", null, \"La velocidad del compilador no afecta solamente al ordenador del desarrollador. Pensemos en una pipeline:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'Push\\n  ↓\\nInstalar dependencias\\n  ↓\\nLint\\n  ↓\\nComprobar tipos\\n  ↓\\nTests\\n  ↓\\nBuild\\n  ↓\\nDocker\\n  ↓\\nDeploy'), mdx(\"p\", null, \"Si la comprobaci\\xF3n de TypeScript forma parte de cada ejecuci\\xF3n, consume tiempo de infraestructura en cada commit, rama y pipeline. Una mejora del compilador puede reducir el tiempo acumulado de CI y, en organizaciones grandes, tener impacto econ\\xF3mico adem\\xE1s de mejorar la experiencia de desarrollo.\"), mdx(\"h2\", null, \"Una lecci\\xF3n de arquitectura\"), mdx(\"p\", null, \"La historia de TypeScript 7 ilustra una lecci\\xF3n de ingenier\\xEDa: una arquitectura adecuada hoy no tiene por qu\\xE9 serlo dentro de diez a\\xF1os. El TypeScript original apareci\\xF3 en un contexto muy diferente; crecieron los proyectos, los monorepos, los ordenadores, los IDE y el n\\xFAmero de desarrolladores que dependen de \\xE9l.\"), mdx(\"p\", null, \"Lleg\\xF3 un momento en el que optimizar la arquitectura existente aportaba beneficios limitados. La respuesta fue m\\xE1s radical: \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"cambiar la implementaci\\xF3n sin cambiar el lenguaje que ve el usuario.\"), \" A veces mejorar un sistema significa optimizar una consulta o a\\xF1adir cach\\xE9; otras, el problema est\\xE1 en una decisi\\xF3n arquitect\\xF3nica fundamental que ya no responde a las necesidades actuales.\"), mdx(\"h2\", null, \"\\xBFDebemos actualizar todos los proyectos inmediatamente?\"), mdx(\"p\", null, \"No necesariamente. Que TypeScript 7 sea m\\xE1s r\\xE1pido no significa que debamos actualizar un proyecto de producci\\xF3n sin comprobar antes su compatibilidad. Una migraci\\xF3n razonable deber\\xEDa seguir este orden:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Revisar la versi\\xF3n actual de TypeScript y las opciones obsoletas del \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"tsconfig\"), \".\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Ejecutar la comprobaci\\xF3n de tipos, los tests y el build de producci\\xF3n.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Revisar las herramientas que dependen de la API de TypeScript.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Comparar los tiempos de compilaci\\xF3n.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Actualizar CI/CD despu\\xE9s de validar el proyecto.\")), mdx(\"p\", null, \"En proyectos sencillos el cambio puede ser casi transparente. En aquellos con herramientas profundamente integradas en las APIs internas de TypeScript, puede requerir m\\xE1s atenci\\xF3n.\"), mdx(\"h2\", null, \"C\\xF3mo medir si realmente hemos ganado rendimiento\"), mdx(\"p\", null, \"No tiene mucho sentido actualizar \\xFAnicamente porque Microsoft publique una cifra. Podemos medir nuestro propio proyecto:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'time npx tsc --noEmit'), mdx(\"p\", null, \"Ejecuta varias veces la prueba con la versi\\xF3n anterior y calcula un valor representativo. Despu\\xE9s rep\\xEDtela con TypeScript 7. Tambi\\xE9n se puede medir el build completo:\"), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, 'npm run build'), mdx(\"p\", null, \"Aqu\\xED hay que tener cuidado: el tiempo puede incluir TypeScript, Vite o Webpack, Angular compiler, minificaci\\xF3n, procesamiento CSS y generaci\\xF3n de assets. Para medir TypeScript hay que intentar aislar TypeScript; de lo contrario, podr\\xEDamos concluir err\\xF3neamente que el nuevo compilador no aporta mejoras cuando el cuello de botella real est\\xE1 en otra parte.\"), mdx(\"h2\", null, \"Conclusi\\xF3n\"), mdx(\"p\", null, \"TypeScript naci\\xF3 para resolver un problema de escala. Sus tipos est\\xE1ticos permitieron mantener grandes aplicaciones JavaScript, pero m\\xE1s de una d\\xE9cada despu\\xE9s apareci\\xF3 una paradoja: \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"el propio TypeScript empez\\xF3 a tener problemas para escalar al ritmo de los proyectos que ayud\\xF3 a crear.\")), mdx(\"p\", null, \"La respuesta de Microsoft fue trasladar el compilador y las herramientas principales a una implementaci\\xF3n nativa en Go capaz de aprovechar mejor el hardware moderno. La parte interesante no es simplemente que Go sea m\\xE1s r\\xE1pido, sino que incluso una tecnolog\\xEDa muy exitosa puede llegar a un punto donde continuar optimizando su arquitectura original deja de ser suficiente.\"), mdx(\"p\", null, \"A veces evolucionar significa a\\xF1adir funcionalidades. Otras veces significa sustituir el motor entero intentando que el usuario apenas note el cambio. TypeScript 7 pertenece claramente al segundo grupo.\"), mdx(\"h2\", null, \"Fuentes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/\"\n  }, \"Announcing TypeScript 7.0 \\u2014 Microsoft TypeScript Team\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.typescriptlang.org/docs/handbook/release-notes/typescript-6-0.html\"\n  }, \"TypeScript 6.0 Release Notes \\u2014 TypeScript\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/\"\n  }, \"Announcing TypeScript 7.0 Beta \\u2014 Microsoft TypeScript Team\"))));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"twitterUsername":"@CursosDesarrol1","title":"TypeScript 7: por qué TypeScript ha tenido que reescribirse en Go","seoTitle":"TypeScript 7 y Go: el nuevo compilador nativo","date":"2026-09-15","description":"TypeScript 7 estrena un compilador nativo escrito en Go que puede ser entre 8 y 12 veces más rápido. Analizamos por qué Microsoft ha realizado este cambio y qué supone para los desarrolladores web.","featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/webp;base64,UklGRogAAABXRUJQVlA4IHwAAADwAwCdASoUAAsAPtFUo0uoJKMhsAgBABoJZQCdAB09TH0fkSfjyzuAAP7uwy5OEaSwkGpaN0dtgdEplQhMNxYiT02/+xHMmEKsyvzxG7s2yfNBgFu80BUiJ8aY9ej/TDrBhQ5UFzD8V8Pv+tG4yZIwiyeB4U2eIi0CSAAA","aspectRatio":1.7699115044247788,"src":"/static/a3361908bdefaf623e56faa2b9a7ce63/ccdb5/typescript-7-go-portada.webp","srcSet":"/static/a3361908bdefaf623e56faa2b9a7ce63/6b183/typescript-7-go-portada.webp 200w,\n/static/a3361908bdefaf623e56faa2b9a7ce63/fc32b/typescript-7-go-portada.webp 400w,\n/static/a3361908bdefaf623e56faa2b9a7ce63/ccdb5/typescript-7-go-portada.webp 800w,\n/static/a3361908bdefaf623e56faa2b9a7ce63/9000d/typescript-7-go-portada.webp 1200w,\n/static/a3361908bdefaf623e56faa2b9a7ce63/e0075/typescript-7-go-portada.webp 1600w","sizes":"(max-width: 800px) 100vw, 800px"}}}}}},"pageContext":{"slug":"/articulos/typescript-7-go-compilador-nativo/","previous":{"fields":{"slug":"/avisos_legales/politica_cookies/"}},"next":null}},"staticQueryHashes":["2032873950"]}